import pandas as pd
import numpy as np
from joblib import load
import warnings
warnings.filterwarnings('ignore')

# 1. 加载测试数据和特征
test_data = pd.read_csv('test_without_label.csv')
final_features = pd.read_csv('final_features.csv')

# 重命名 merchant_id 为 seller_id，与特征表保持一致
#test_data.rename(columns={'merchant_id': 'seller_id'}, inplace=True)

# 2. 合并特征
merged_test = pd.merge(
    test_data,
    final_features,
    on=['user_id', 'merchant_id'],
    how='left'
)

# 保存ID列用于结果输出
ids = merged_test[['user_id', 'merchant_id']].copy()

# 提取特征并处理缺失值
X_test = merged_test.drop(['user_id', 'merchant_id'], axis=1, errors='ignore')
X_test = X_test.fillna(0)

# 3. 加载训练好的模型（这里假设使用梯度提升树模型，你可以选择其他模型）
model = load('gradient_boosting_model.joblib')

# 4. 预测
probabilities = model.predict_proba(X_test)[:, 1]  # 获取正类的概率
predictions = model.predict(X_test)

# 5. 生成结果DataFrame
results = pd.DataFrame({
    'user_id': ids['user_id'],
    'merchant_id': ids['merchant_id'],  # 恢复原始列名
    'prob': probabilities,
    'label': predictions
})

# 6. 保存结果
results.to_csv('prediction_results1.csv', index=False)

print("预测完成，结果已保存至 prediction_results1.csv")